ทดลอง Deploy PHP ด้วย Elastic Beanstalk และลองเชื่อมต่อกับ RDS
ครั้งนี้ผมจะมาอธิบายเกี่ยวกับการ ทดลอง Deploy PHP ด้วย Elastic Beanstalk และลองเชื่อมต่อกับ RDS ครับ
เป้าหมายในการทำ
ผมจะสร้าง Applications และ Environments ใน Elastic Beanstalk โดยใช้ Platform PHP และ Deploy PHP ด้วย Environments จากนั้นทำการเชื่อมต่อไปยัง RDS และเพิ่มข้อมูลลงใน Database ของ RDS ตามด้วยสร้างโปรแกรมที่ใช้ในการแสดงข้อมูล MySQL และทดสอบการแสดงข้อมูลบนหน้าจอ (Web Browser) ครับ
สร้าง Key Pairs และ Security Groups เพื่อใช้สำหรับ Elastic Beanstalk
ขั้นตอนนี้ผมจะสร้าง Key Pairs เตรียมไว้เพื่อใช้กับ Instance ที่จะสร้างใน Environments ของ Elastic Beanstalk และสร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk
สร้าง Key Pairs เพื่อใช้กับ Instance ที่สร้างจาก Elastic Beanstalk
ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การ Create Key Pair
ตัวอย่างตั้งค่าการสร้าง Key Pairs ในบทความนี้
※Create Key pairs
Name:tinnakorn-test
Private key file format:.ppk
สร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk
ขั้นตอนนี้เป็นการสร้าง Security Group โดยใช้ชื่อว่าtinnakorn-test-eb
เข้ามาที่ Service Amazon EC2 มาที่เมนูด้านซ้ายหัวข้อ ▼ Network & Security แล้วคลิกSecurity Groups
เมื่อเข้ามาหน้า Create security group แล้วให้ตั้งค่า Basic details:
» Security group name:tinnakorn-test-eb
(ชื่ออะไรก็ได้)
» Description:tinnakorn-test-eb
(ใส่อะไรก็ได้)
จากนั้นเลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate security group
การสร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk ก็เสร็จเรียบร้อยแล้วครับ ให้ทำขั้นตอนถัดไปได้เลยครับ
วิธีการสร้าง RDS
ให้ทำการสร้าง RDS ตามลิงก์ด้านล่างนี้ได้เลยครับ (ทำเฉพาะหัวข้อที่ระบุไว้ด้านล่างนี้เท่านั้นครับ)
ตัวอย่างตั้งค่าการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS ในบทความนี้
Create security group
※Basic details
» Security group name:tinnakorn-test-rds
» Description:tinnakorn-test-rds
※Inbound rules
Inbound:MySQL/Aurora
| Source:tinnakorn-test-eb
(เลือก Security Group ของ tinnakorn-test-eb ที่สร้างขึ้นเมื่อสักครู่นี้)Create database
※Engine options
» Engine type: ◉MySQL
» Edition: ◉MySQL Community
» Version:MySQL 8.0.28
※Templates
» ◉Production
※Availability and durability
» Deployment options: ◉Single DB instance
※Settings
» DB instance identifier:tinnakorn-test-rds
▼ Credentials Settings
» Master username:admin
» Master password:PassW0rd
» Confirm password:PassW0rd
※Instance configuration
» DB instance class: ◉ Burstable classes (includes t classes)
[db.t3.micro ▼
]
※Storage
» Storage type:General Purpose SSD (gp2)
» Allocated storage:20
GiB※Connectivity
» Public access: ◉No
» Existing VPC security groups:tinnakorn-test-rds
※Database authentication
» Database authentication options: ◉Password authentication
※Additional configuration
Database options
» Initial database name:tinnakorn
(ตั้งชื่อ Database)
การสร้าง RDS ก็เสร็จเรียบร้อยแล้วครับ ให้ทำขั้นตอนถัดไปได้เลยครับ
เตรียมไฟล์สำหรับใช้ใน Elastic Beanstalk
ขั้นตอนนี้ผมจะสร้างไฟล์ info.php บน Windows เตรียมไว้ใช้อัปโหลดใน Elastic Beanstalk ครับ
สร้างไฟล์ info.php ด้วย Notepad บน Windows
เปิด Notepad ขึ้นมา แล้ว Copy Code ด้านล่างนี้วางลงที่นี่
<?php phpinfo();
เมื่อวาง Code เสร็จแล้ว มาที่มุมซ้ายบน คลิกFile
และเลือกSave
เราจะ Save ไฟล์ลงไว้ที่ไหนก็ได้ แต่ในตัวอย่างนี้คือ:
① เลือกDesktop
② File name:info.php
(ตั้งชื่อไฟล์ตามนี้นะครับ)
③ Save as type:All files (*.*)
④ Encoding:UTF-8
⑤ คลิกSave
เมื่อคลิก Save แล้วก็จะได้ตามรูปภาพด้านล่างนี้ (ที่สำคัญให้ตรวจสอบชื่อไฟล์ใน Notepad ที่มุมซ้ายบน ถ้าเป็นชื่อinfo.php
- Notepad ก็ถือว่าการสร้างไฟล์ถูกต้อง)
ทีนี้ปิด Notepad ไปได้เลย จากนั้นคลิกขวาที่ไฟล์info.php
และเลือกCompress to ZIP file
เพื่อบีบอัดไฟล์ให้เป็นinfo.zip
เมื่อบีบอัดไฟล์ให้เป็น info.zip เสร็จแล้ว ก็จะได้ไอคอนแบบนี้ (สำหรับคนที่ใช้ WinRAR หรือโปรแกรมแตกไฟล์อื่นๆ ก็อาจจะเป็นไอคอนตามโปรแกรมที่เรากำลังใช้งานอยู่ครับ)
จากนั้นทำการเปลี่ยนชื่อไฟล์ info.zip ให้เป็นวันที่และเวลาปัจจุบัน เช่น20220707_1203.zip
เป็นต้น (แนะนำให้ตั้งชื่อไฟล์ตามวันที่และเวลา)
จากนั้นคลิกเข้ามาที่ไฟล์20220707_1203.zip
ของเราเพื่อตรวจสอบไฟล์ที่เราทำการบีบอัดไว้
การสร้าง Application ใน Elastic Beanstalk
ขั้นตอนนี้ผมจะลองสร้าง Application โดยใช้ Platform PHP ในการรัน Server ครับ
ค้นหาElastic Beanstalk
และคลิกเข้ามาที่Elastic Beanstalk
สำหรับผู้ที่ยังไม่เคยใช้งานให้ดูที่ด้านขวาตรงหัวข้อ Get started และคลิกที่Create Application
เมื่อเข้ามาที่หน้า Create a web app แล้ว มาที่หัวข้อ Application information แล้วตั้งค่าดังนี้:
» Application name:tinnakorn-test
(ชื่ออะไรก็ได้)
ขั้นตอนต่อไปนี้คือการอธิบายสำหรับคนที่ยังไม่เคยสร้าง Application ด้วย Elastic Beanstalk
■ กรณีที่ยังไม่ได้สร้าง Application ด้วย Elastic Beanstalk ตอนสร้างจะแสดงหน้าจอแบบนี้
※สิ่งที่ต้องทำ
・การสร้าง Appilcation + การสร้าง Environments:Sample
・ลบ Environments:Sample
・สร้าง Environments ใหม่ขึ้นมา■ กรณีที่มีการสร้าง Application ด้วย Elastic Beanstalk มาก่อนแล้ว ตอนสร้างจะแสดงหน้าจอแบบนี้
※สิ่งที่ต้องทำ
・สร้าง Appilcation
・สร้าง Environmentsดังนั้นสำหรับคนที่เคยสร้าง Application มาก่อนแล้ว กดให้ข้ามไปเฉพาะส่วนของ 「 การสร้าง Environments:Sample และ การ Terminate Environments:Sample 」 เท่านั้น โดยกดข้ามไปที่หัวข้อ การสร้าง Environment ใน Elastic Beanstalk ได้เลยครับ
การตั้งค่าในหัวข้อ Platform:
» การสาธิตในครั้งนี้ผมจะใช้ Platform:PHP
» Platform branch จะถูกเลือกให้อัตโนมัติ
» Platform version ก็จะถูกเลือกให้อัตโนมัติเหมือนกัน (Platform version จะมีการอัปเดตเวอร์ชันใหม่มาเรื่อยๆ ดังนั้นแนะนำให้ใช้เวอร์ชันที่มี (Recommended) ครับ)
ถัดมาหัวข้อ Application code ผมจะใช้เป็น ◉Sample application
เมื่อตั้งค่าหน้านี้เสร็จแล้ว คลิกที่ปุ่มCreate application
เมื่อเสร็จแล้วจะแสดงหน้าจอแบบนี้
Terminate environment ที่ถูกสร้างขึ้นอัตโนมัติ
ขั้นตอนนี้ให้ทำการ Terminate environment ที่ถูกสร้างขึ้นใน Applications โดยอัตโนมัติทิ้งไป
เพราะว่าเราไม่ได้ใช้ environment:[Yourname]-env
นี้ในการ Deploy PHP ครับ
มาที่มุมขวาบน คลิกปุ่มActions
และเลือกTerminate environment
ยืนยันการ Terminate โดยคัดลอกชื่อ environment ของเรามาใส่ช่องด้านล่าง และกดปุ่มTerminate
รอการ Terminate environment สักครู่ครับ
เมื่อ Terminate environment เสร็จแล้ว จะแสดงหน้าจอแบบนี้
จากนั้นให้คลิกที่ Application name ของเรา เช่นtinnakorn-test
เมื่อเข้ามาที่ Application ของเราแล้วจะแสดงหน้าจอแบบนี้
การสร้าง Environment ใน Elastic Beanstalk
ขั้นตอนนี้ผมจะทำการสร้าง Environment ที่ใช้สำหรับการ Deploy PHP ครับ
มาที่ด้านบนขวา คลิกปุ่มCreate a new environment
การตั้งค่าในหัวข้อ Select environment tier:
» ◉ Web server environment
» คลิกปุ่มSelect
การตั้งค่าในหัวข้อ Environment information:
» Environment name:tinnakorn-test-20220707
(ชื่ออะไรก็ได้)
» Domain:tinnakorn-test-20220707
» กดปุ่มCheck availability
ถ้าขึ้นสถานะ [ ✅ tinnakorn-test-20220707.ap-southeast-1.elasticbeanstalk.com is available. ] แบบนี้ก็คือเราสามารถใช้ได้ (ถ้าชื่อซ้ำกับคนอื่นก็จะขึ้น Error เพราะไม่สามารถใช้ชื่อซ้ำกันได้)
การตั้งค่าในหัวข้อ Platform:
» ◉ Managed platform
» Platform:PHP
» Platform branch จะถูกเลือกให้อัตโนมัติ
» Platform version ก็จะถูกเลือกให้อัตโนมัติเหมือนกัน (Platform version จะมีการอัปเดตเวอร์ชันใหม่มาเรื่อยๆ ดังนั้นแนะนำให้ใช้เวอร์ชันที่มี (Recommended) ครับ)
การตั้งค่าในหัวข้อ Application code:
» เลือก ◉ Upload your code
» Version label:20220707_1203
(แนะนำให้ใส่ชื่อเดียวกับไฟล์.zip
ที่บีบอัดไว้ก่อนหน้านี้)
» Source code origin: ◉ Local file
» คลิกปุ่มChoose file
ค้นหาไฟล์20220707_1203.zip
จากที่อยู่ไฟล์ของเรา (ของผมจะอยู่ที่ Desktop)
เลือกไฟล์และคลิกปุ่มOpen
เมื่ออัปโหลดไฟล์เสร็จแล้วจะมี [ File name : 20220707_1203.zip ] แสดงขึ้นมา
และจะแสดงสถานะ [ ✅ File successfully uploaded ] แบบนี้
จากนั้นคลิกปุ่มConfigure more options
※หน้า Configure [Your_name_env]
เมื่อคลิกปุ่ม Configure more options แล้วจะเข้ามาหน้า Configure [Your_name_env] แล้วจะแสดงหน้าจอแบบนี้
จากนั้นทำการตั้งค่าในขั้นตอนถัดไปได้เลยครับ
การตั้งค่าหน้า Modify instances
มาที่หัวข้อ Instances คลิกที่Edit
การตั้งค่าหน้า Modify instances หัวข้อ Root volume (boot device):
» Root volume type:General Purpose (SSD)
» Size:8
GB (ใส่ตามจำนวนที่ต้องการใช้งาน)
ถัดมาหัวข้อ EC2 security groups:
» Group name: ติ๊ก✅
tinnakorn-test-eb (เลือก Security groups ที่สร้างไว้สำหรับ Elastic Beanstalk)
» คลิกปุ่มSave
การตั้งค่าหน้า Modify capacity
มาที่หัวข้อ Capacity คลิกที่Edit
การตั้งค่าหน้า Modify capacity หัวข้อ Auto scaling group:
» เลื่อนลงมาข้างล่างที่ Instance types แล้วคลิก✕
ที่ t2.micro และ t2.small ออกไป
จากนั้นพิมพ์ค้นหาและเลือก Instance types ที่เราต้องการ เช่นt3a.nano
เมื่อตั้งค่าเสร็จแล้ว เลื่อนลงมาด้านล่างขวาสุด คลิกปุ่มSave
การตั้งค่าหน้า Modify security
มาที่หัวข้อ Security คลิกที่Edit
การตั้งค่า Modify security:
※Service role
» Service role จะถูกเลือกโดยอัตโนมัติ
※Virtual machine permissions
» EC2 key pair:tinnakorn-test
(เลือก Key Pair ที่เราสร้างไว้ตอนแรก)
» IAM instance profile จะถูกเลือกโดยอัตโนมัติ
» เมื่อตั้งค่าเสร็จแล้ว คลิกปุ่มSave
การตั้งค่าหน้า Managed Updates
มาที่หัวข้อ Managed Updates คลิกที่Edit
การตั้งค่าหน้า Modify managed updates หัวข้อ Managed platform updates:
» Managed updates: ติ๊ก ✅ ออกให้เป็น □ Enabled (เพื่อไม่ให้มีการอัปเดต)
» คลิกปุ่มSave
เมื่อตั้งค่าในหน้า Configure [Your_name_env] เสร็จแล้ว เลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate environment
จากนั้นรอการเริ่มต้นระบบสักครู่ เมื่อเสร็จแล้วจะแสดงหน้าจอแบบนี้
การตรวจสอบหน้าเว็บเบราว์เซอร์
คลิกที่ URL ตามรูปภาพได้เลยครับ
เมื่อคลิก URL เข้ามาแล้วจะแสดงหน้าจอ 403 Forbidden แบบนี้
ทีนี้ให้เราเพิ่มชื่อไฟล์/info.php
ต่อท้ายลิงก์ที่คลิกจากหน้า Environments ของเราตามตัวอย่างด้านล่างนี้ครับ
http://[URL Elastic Beanstalk]/info.php
ถ้าแสดงหน้าจอแบบนี้ การ Deploy PHP (info.php) ก็เสร็จสมบูรณ์ครับ
การเชื่อมต่อกับ EC2 ที่สร้างจาก Elastic Beanstalk ด้วย PuTTY
สิ่งที่จะทำในขั้นตอนนี้คือ:
・ตรวจสอบ Instance ID จาก Health
・ตรวจสอบ IP Address จาก EC2
・ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・ตรวจสอบไฟล์ info.php ที่อัปโหลดขึ้นไป ใน Elastic Beanstalk
ตรวจสอบ Instance ID จาก Health
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: ตรวจสอบ Instance ID จาก Health
ตรวจสอบ IP Address จาก EC2
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: ตรวจสอบ IP Address จาก EC2
ทำการเชื่อมต่อกับ EC2 ที่สร้างใน Elastic Beanstalk ด้วย PuTTY
ในขั้นตอนนี้ให้ทำการเชื่อมต่อกับ EC2 ที่สร้างจาก Environments ใน Elastic Beanstalk ด้วย PuTTY
ดูตัวอย่างที่นี่เฉพาะหัวข้อหลักนี้: การ Connect to EC2 by PuTTY
ตัวอย่างตั้งค่าการเชื่อมต่อกับ EC2 ที่สร้างใน Elastic Beanstalk ด้วย PuTTY
※Session:
Host Name:Your Public IPv4 address (EC2 Instance)
Saved Sessions:tinnakorn-eb-test
(ชื่ออะไรก็ได้)※Connection:
Seconds between keepalives (0 to turn off):60
※Connection → Data:
Auto-login username:ec2-user
(บังคับให้ใส่ตามนี้เพราะว่าเป็น AMI: Amazon Linux 2)※Connection → SSH → Auth:
Private key file for authentication: [Browse...]tinnakorn-eb-test.ppk
(เลือก key_pairs.ppk ของเรา)※Session:
Saved Sessions:tinnakorn-eb-test
[Save and Open]
Output (example)
root@ip-172-31-1-143:~
Using username "ec2-user".
Authenticating with public key "tinnakorn-eb-test" from agent
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-1-143 ~]$
รันคำสั่งนี้เพื่อเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ root (ถ้ารันคำสั่งนี้แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)
sudo su -
Output (example)
root@ip-172-31-1-143:~
[ec2-user@ip-172-31-1-143 ~]$ sudo su -
[root@ip-172-31-1-143 ~]#
ตรวจสอบไฟล์ info.php ที่อัปโหลดขึ้นไป ใน Elastic Beanstalk
รันคำสั่งนี้เพื่อเข้าไปที่/var/www/html/
cd /var/www/html/
Output (example)
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 ~]# cd /var/www/html/
[root@ip-172-31-1-143 html]#
รันคำสั่งนี้เพื่อตรวจสอบไฟล์ info.php ในโฟลเดอร์ html
ll
Output (example)
จะเห็นว่ามีไฟล์ info.php อยู่ในโฟลเดอร์ html นี้
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 html]# ll
total 4
-rw-r--r-- 1 webapp webapp 17 Jul 6 2022 info.php
[root@ip-172-31-1-143 html]#
ทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS ด้วยคำสั่ง MySQL
รันคำสั่งนี้เพื่อทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS (ก่อนรันคำสั่งเปลี่ยนข้อมูลใน [ ] ให้เป็นของคุณ)
・Endpoint RDS: (-h [your_endpoint_rds])
・Master username: (-u admin)
・Master password: (-p[your_password_rds])
・Database Name RDS: ([your_database_name])
mysql -h [your_endpoint_rds] -u admin -p[your_password_rds] [your_database_name]
Output (example)
ถ้าแสดงหน้าจอแบบนี้ ก็ถือว่าเราสามารถเชื่อมต่อไปยัง RDS ได้ครับ
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 html]# mysql -h tinnakorn-test-rds.xxxxxxxxxxxx.ap-southeast-1.rds.amazonaws.com -u admin -pPassW0rd tinnakorn
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 63
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [tinnakorn]>
เมื่อเข้ามาหน้า MySQL Prompt ได้แล้ว ให้ทำการสร้าง Table ตามคำสั่งด้านล่างนี้ (test คือชื่อ Table ซึ่งคุณสามารถใช้ชื่ออื่นก็ได้ครับ)
create table test (id int, message varchar(255));
Output (example)
root@ip-172-31-1-143:~
MySQL [tinnakorn]> create table test (id int, message varchar(255));
Query OK, 0 rows affected (0.03 sec)
MySQL [tinnakorn]>
เมื่อสร้าง Table เสร็จแล้วให้รันคำสั่งนี้เพื่อเพิ่มข้อมูลลงใน Table:test
insert into test values (1, "text1");
Output (example)
root@ip-172-31-1-143:~
MySQL [tinnakorn]> insert into test values (1, "text1");
Query OK, 1 row affected (0.01 sec)
MySQL [tinnakorn]>
รันคำสั่งนี้เพื่อแสดงข้อมูล Table
select * from test;
Output (example)
root@ip-172-31-1-143:~
MySQL [tinnakorn]> select * from test;
+------+---------+
| id | message |
+------+---------+
| 1 | text1 |
+------+---------+
1 row in set (0.00 sec)
MySQL [tinnakorn]>
เมื่อทำการเพิ่มข้อมูลเสร็จแล้ว รันคำสั่งนี้เพื่อออกจาก MySQL Prompt กลับมาที่ html
quit
Output (example)
root@ip-172-31-1-143:~
MySQL [tinnakorn]> quit
Bye
[root@ip-172-31-1-143 html]#
เมื่อสร้าง Table และเพิ่มข้อมูลลงใน Table เสร็จแล้ว ให้ทำขั้นตอนต่อไปได้เลยครับ
การ Deploy PHP และแสดงข้อมูลจากหน้า Web Browser
ในหัวข้อนี้ผมจะแนะนำวิธีการแก้ไข (เปลี่ยนตำแหน่ง) โปรเจกต์ที่ Deploy ไปแล้วครับ
ผมจะทำการสร้างโปรแกรมที่ใช้ในการแสดงข้อมูล MySQL บนหน้าจอ (Web Browser) โดยเขียนลงในไฟล์ list.php เพื่อให้สามารถตรวจสอบข้อมูลที่ผมได้เพิ่มลงใน Table จากหน้าจอ (Web Browser) ได้ครับ
สร้างโปรแกรมที่ใช้แสดงข้อมูล MySQL บนหน้าจอ (Web Browser) ด้วย Notepad บน Windows
เปิด Notepad ขึ้นมา แล้ว Copy Code ด้านล่างนี้วางลงที่นี่
จากนั้นเปลี่ยนข้อมูล [$db_host, $db_name, $db_user, $db_password
] ให้เป็นของคุณ
・$db_host: Endpoint RDS (เมื่อสร้าง RDS เสร็จก็จะได้ Endpoint มาและให้ Copy Endpoint มาใส่ที่นี่)
・$db_name: Database Name RDS
・$db_user: Master username
・$db_password: Master password
<?php $db_host = '[your_endpoint_rds]'; $db_port = '3306'; $db_name = '[your_database_name]'; $db_user = 'admin'; $db_password = '[your_password_rds]'; $con = mysqli_connect($db_host, $db_user, $db_password, $db_name); $con->set_charset('utf8mb4'); $sql = "SELECT * FROM test"; if ($result = mysqli_query($con, $sql)) { while ($obj = mysqli_fetch_object($result)) { echo "$obj->id $obj->message<br>\n"; } mysqli_free_result($result); } mysqli_close($con); ?>
เมื่อเปลี่ยนข้อมูล [$db_host, $db_name, $db_user, $db_password
] ให้เป็นของเราเสร็จแล้ว
มาที่มุมซ้ายบน คลิกFile
และเลือกSave
เราจะ Save ไฟล์ลงไว้ที่ไหนก็ได้ แต่ในตัวอย่างนี้คือ:
① เลือกDesktop
② File name:list.php
(ตั้งชื่อไฟล์ตามนี้นะครับ)
③ Save as type:All files (*.*)
④ Encoding:UTF-8
⑤ คลิกSave
เมื่อคลิก Save แล้วก็จะได้ตามรูปภาพด้านล่างนี้ (ที่สำคัญให้ตรวจสอบชื่อไฟล์ใน Notepad ที่มุมซ้ายบน ถ้าเป็นชื่อlist.php
- Notepad ก็ถือว่าการสร้างไฟล์ถูกต้อง)
ทีนี้ปิด Notepad ไปได้เลย แล้วใช้เมาส์ลากครอบไฟล์ [ info.php กับ list.php ] และคลิกขวาที่ไฟล์ใดไฟล์หนึ่ง
จากนั้นเลือกCompress to ZIP file
เพื่อบีบอัดไฟล์info.php กับ list.php
เข้าด้วยกัน (ครั้งนี้ต้องทำการบีบอัดเข้าด้วยกันทั้ง 2 ไฟล์ เพราะว่าถ้า Deploy ไปแล้ว ไฟล์ info.php ที่อัปโหลดไปก่อนหน้านั้นจะถูกลบไปครับ)
เมื่อบีบอัดไฟล์รวมกันเสร็จแล้ว ก็จะได้ไอคอนแบบนี้ (ไม่ว่าจะเป็นชื่อ list.zip หรือ info.zip ก็ไม่เป็นไรครับ เพราะชื่อจะถูกสร้างตามเม้าส์ที่เราชี้ไฟล์นั้นก่อนทำการบีบอัดนั่นเอง)
ต่อไปให้ทำการเปลี่ยนชื่อไฟล์ที่บีบอัดเมื่อสักครู่นี้ให้เป็นวันที่และเวลาปัจจุบัน เช่น20220707_1457.zip
เป็นต้น (แนะนำให้ตั้งชื่อไฟล์ตามวันที่และเวลา)
จากนั้นคลิกเข้ามาที่ไฟล์20220707_1457.zip
ของเราเพื่อตรวจสอบไฟล์ [ info.php กับ list.php ] ที่เราทำการบีบอัดไว้
ตอนนี้ผมได้เตรียมไฟล์เพื่อใช้สำหรับ Deploy เสร็จเรียบร้อยแล้วครับ ผมก็จะเริ่มทำขั้นตอนถัดไปเลยครับ
Deploy PHP ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลจากหน้า Web Browser
ขั้นตอนนี้ผมจะทำการ Deploy PHP โดยใช้ไฟล์20220707_1457.zip
ที่บีบอัดไว้เมื่อสักครู่นี้ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลที่ผมได้เพิ่มลงใน Database RDS จากหน้า Web Browser ครับ
มาที่เมนูด้านซ้ายตรงชื่อ Application ของเรา เช่น▼ tinnakorn-test
และเลือกApplication versions
ตั้งค่าการอัปโหลดในหัวข้อ Upload Application Version:
» Version label:20220707_1457
(แนะนำให้ใส่ชื่อเดียวกับไฟล์.zip
ที่บีบอัดไว้เมื่อสักครู่นี้)
» คลิกปุ่มChoose file
ค้นหาไฟล์20220707_1457.zip
จากที่อยู่ไฟล์ของเรา (ของผมจะอยู่ที่ Desktop)
เลือกไฟล์และคลิกปุ่มOpen
เมื่ออัปโหลดเสร็จแล้วจะแสดงเป็น [ File name: 20220707_1457.zip ✅ ] แบบนี้
จากนั้นให้คลิกUpload
ได้เลยครับ
ติ๊กที่✅ 20220707_1457.zip
และคลิกActions ▼
ตามด้วยเลือกDeploy
เมื่อเสร็จแล้วจะแสดงข้อความเหมือนกับรูปภาพ
ตรวจสอบ Events
มาที่เมนูด้านซ้าย คลิกที่ Environments ของเรา เช่น▼ tinnakorn-test-20220707
และเลือกEvents
มาที่ด้านขวา แล้วดู Events ตรงช่อง Details ตามตัวเลขดังนี้:
① เริ่มต้นการ Deploy และเริ่มทำการเปลี่ยนแปลงโปรแกรม
② เสร็จสิ้นการ Deploy และการเปลี่ยนแปลงโปรแกรมก็เสร็จสมบูรณ์
ตรวจสอบ Application ที่ Deployed
ตรวจสอบไฟล์ที่ Deploy ไปแล้วใน PuTTY
กลับมาที่ PuTTY แล้วรันคำสั่งนี้เพื่อเข้าไปที่/var/www/html
อีกครั้ง (ทุกครั้งที่มีการ Deploy โปรเจกต์ Path [/var/www/html] จะถูกลบและรีเซ็ตใหม่ทุกครั้งครับ)
cd /var/www/html/
Output (example)
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 html]# cd /var/www/html/
[root@ip-172-31-1-143 html]#
รันคำสั่งนี้เพื่อตรวจสอบไฟล์ที่ Deploy ไปยัง Elastic Beanstalk ใน html
ll
Output (example)
จะเห็นว่ามีไฟล์ [info.php และ list.php] อยู่ใน html
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 html]# ll
total 8
-rw-r--r-- 1 webapp webapp 17 Jul 6 11:17 info.php
-rw-r--r-- 1 webapp webapp 521 Jul 7 2022 list.php
[root@ip-172-31-1-143 html]#
ตรวจสอบไฟล์ที่ Deploy ไปแล้วจากหน้า (Web Browser)
กลับมาที่หน้า (Web Browser) แล้วทำการ Reload อีกครั้ง จะเห็นว่าสามารถแสดงหน้าหลักของ phpinfo ของไฟล์ info.php ได้เหมือนเดิมครับ
ต่อไปให้ทดสอบไฟล์ list.php โดยเปลี่ยนเป็น URL ตามด้านล่างนี้ครับ
http://[URL Elastic Beanstalk]/list.php
จะเห็นว่าสามารถแสดงหน้าข้อมูลที่ผมเพิ่มลงใน Table: test ได้
ทดสอบผลการ Deploy PHP
เพิ่มข้อมูลลงใน Table
ผมจะเพิ่มข้อมูล [ id: 2, message: text2 | id: 3, message: text3 ] ลงใน Table:test
อีกครั้ง
รันคำสั่งนี้เพื่อทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS อีกครั้ง (ก่อนรันคำสั่งเปลี่ยนข้อมูลใน [ ] ให้เป็นของคุณ)
・Endpoint RDS: (-h [your_endpoint_rds])
・Master username: (-u admin)
・Master password: (-p[your_password_rds])
・Database Name RDS: ([your_database_name])
mysql -h [your_endpoint_rds] -u admin -p[your_password_rds] [your_database_name]
Output (example)
root@ip-172-31-1-143:~
[root@ip-172-31-1-143 html]# mysql -h tinnakorn-test-rds.xxxxxxxxxxxx.ap-southeast-1.rds.amazonaws.com -u admin -pPassW0rd tinnakorn
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 86
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [tinnakorn]>
รันคำสั่งนี้เพื่อเพิ่มข้อมูล [ id: 2, message: text2 | id: 3, message: text3 ] ลงใน Table:test
และแสดงผลข้อมูล (สามารถรันคำสั่งพร้อมกันได้เลยครับ)
insert into test values (2, "text2"); insert into test values (3, "text3"); select * from test;
Output (example)
root@ip-172-31-1-143:~
MySQL [tinnakorn]> insert into test values (2, "text2");
Query OK, 1 row affected (0.00 sec)
MySQL [tinnakorn]> insert into test values (3, "text3");
Query OK, 1 row affected (0.00 sec)
MySQL [tinnakorn]> select * from test;
+------+---------+
| id | message |
+------+---------+
| 1 | text1 |
| 2 | text2 |
| 3 | text3 |
+------+---------+
3 rows in set (0.00 sec)
MySQL [tinnakorn]>
ตรวจสอบการแสดงข้อมูลในหน้า (Web Browser)
หลังจากที่ผมได้เพิ่มข้อมูลลงใน Table ไปแล้ว ทีนี้ผมจะตรวจสอบข้อมูลในหน้า (Web Browser) ของไฟล์ list.php ครับ
กลับมาที่หน้า (Web Browser) แล้วทำการ Reload อีกครั้ง จะเห็นว่ามีข้อมูล [ 2 text2 และ 3 text3 ] เพิ่มขึ้นมาครับ
เพียงเท่านี้เราก็สามารถ Deploy ไฟล์ [ info.php และ list.php ] ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลตามที่เราเพิ่มลงใน Table ของ Database RDS ได้แล้วครับ
วิธีการลบ AWS Resource ที่สร้างขึ้นในบทความนี้
การลบฟังก์ชันที่ได้สร้างขึ้นใน Service ต่างๆ
ลบโดยเรียงตามขั้นตอนดังนี้:
- RDS
- Databases
- Elastic Beanstalk
- Environments (Terminate)
- Applications
- Amazon EC2
- Key Pairs
- Security Groups (RDS)
- Security Groups (Elastic Beanstalk)
วิธีการลบ RDS
ในหัวข้อนี้คือการลบ RDS
ดูตัวอย่างที่นี่เฉพาะหัวข้อหลักนี้: วิธีการลบ RDS
การลบ Environments และ Applications ใน Elastic Beanstalk
ในหัวข้อนี้คือการลบ [ Environments, Applications ] ใน Elastic Beanstalk และลบ [ Key Pairs ] ใน Amazon EC2
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: การลบ Environments และ Applications ใน Elastic Beanstalk
วิธีการลบ Security Groups ใน Amazon EC2
ในหัวข้อนี้คือการลบ Security Groups ของ RDS และ Elastic Beanstalk ใน Amazon EC2
เข้ามาที่ 「 Service Amazon EC2 」 แล้วทำการลบ Security Groups ของ RDS และ Elastic Beanstalk
โดยการลบนี้ต้องทำการลบ Security Groups (RDS) ก่อน แล้วค่อยลบ Security Groups (Elastic Beanstalk)
※ลบ Security Group (RDS)
ต้องรอจนกว่าการลบ RDS เสร็จสิ้นก่อน จึงจะสามารถลบ Security Group ของ RDS ได้
※ลบ Security Group (Elastic Beanstalk)
ต้องรอจนกว่าการ Terminated Environments และการลบ Applications ใน Elastic Beanstalk เสร็จสิ้นก่อน จึงจะสามารถลบ Security Group ของ Elastic Beanstalk ได้
สรุป
การสาธิตนี้เป็นการ Deploy PHP (ไฟล์ info.php กับ list.php) ขึ้นไปยัง Elastic Beanstalk จากนั้นทดสอบการเชื่อมต่อไปยัง RDS และเพิ่มข้อมูลใน Database ตามด้วยทดสอบการแสดงข้อมูลที่เพิ่มลงใน Database ในหน้า (Web Browser) ของไฟล์ list.php ครับ